package com.ruoyi.api.controller;

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.ruoyi.api.dto.employee.resp.EmployeeMapDetailRespDto;
import com.ruoyi.api.dto.employee.resp.EmployeeRealTimeStatisticsRespDto;
import com.ruoyi.api.dto.employee.resp.EmployeeStatisticsRespDto;
import com.ruoyi.api.service.EmployeeStatService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.stat.employee.service.IEmployeeStatService;

import lombok.RequiredArgsConstructor;

/**
 * 人员统计数据汇总
 *
 * @author cc
 * @date 2023-04-28
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/api/stat/employee")
public class EmployeeStatController extends BaseController {

	private final IEmployeeStatService iEmployeeStatService;
	private final EmployeeStatService employeeStatService;
	
	/**
	 * 人员统计数据汇总
	 * <p>
	 * 年（最近一年），月（最近一个月），季（最近3个月），周（最近7天） ，默认年
	 * 
	 * @param type year 年 quarter 季度 month 月 week 周
	 * @return 人员统计数据 resp
	 */
	@GetMapping("/employeeStatistics")
	public R<EmployeeStatisticsRespDto> getEmployeeStatistics(
			@RequestParam(name = "type", defaultValue = "year") String type) {
		return R.ok(employeeStatService.getEmployeeStatistics(type));
	}

	/**
	 * 人员实时数据
	 * 
	 * @param date 查询日期，格式 2013-04-30 , 默认 当天
	 * @return 人员统计实时数据 resp
	 */
	@GetMapping("/employeeRealTimeStatistics")
	public R<EmployeeRealTimeStatisticsRespDto> getEmployeeRealTimeStatistics(
			@RequestParam(name = "date", defaultValue = "") String date) {
		return R.ok(employeeStatService.getEmployeeRealTimeStatistics(date));
	}

	/**
	 * 人员实时明细数据 -> 地图上面的人员实时数据
	 * @param serviceTypeId 服务类型id
	 * @param date 查询时间，格式 2013-03-11 , 默认 当天
	 * @return 人员实时明细数据 resp
	 */
	@GetMapping("/employeeMapDetail")
	public R<EmployeeMapDetailRespDto> getEmployeeMapDetail(
			@RequestParam(name = "serviceTypeId") Integer serviceTypeId,
			@RequestParam(name = "date", defaultValue = "") String date) {
		return R.ok(employeeStatService.getEmployeeMapDetail(serviceTypeId, date));
	}

	/**
	 * 内部测试使用，构造数据
	 * 
	 * @param queryTime
	 * @return
	 */
	@GetMapping("/createData")
	public R<Void> createData(@RequestParam(name = "queryTime", defaultValue = "") String queryTime) {
		return toAjax(iEmployeeStatService.createStatData(queryTime));
	}
}
